<?php
/**
 * Yii-User module
 * 
 * @author Mikhail Mangushev <mishamx@gmail.com> 
 * @link http://yii-user.googlecode.com/
 * @license http://www.opensource.org/licenses/bsd-license.php
 * @version $Id: UserModule.php 105 2011-02-16 13:05:56Z mishamx $
 */

class UserModule extends CWebModule
{
	/**
	 * @var int
	 * @desc items on page
	 */
	public $user_page_size = 10;
	
	/**
	 * @var int
	 * @desc items on page
	 */
	public $fields_page_size = 10;
	
	/**
	 * @var string
	 * @desc hash method (md5,sha1 or algo hash function http://www.php.net/manual/en/function.hash.php)
	 */
	public $hash='md5';
	
	/**
	 * @var boolean
	 * @desc use email for activation user account
	 */
	public $sendActivationMail=false;
	
	/**
	 * @var boolean
	 * @desc allow auth for is not active user
	 */
	public $loginNotActiv=false;
	
	/**
	 * @var boolean
	 * @desc activate user on registration (only $sendActivationMail = false)
	 */
	public $activeAfterRegister=false;
	
	/**
	 * @var boolean
	 * @desc login after registration (need loginNotActiv or activeAfterRegister = true)
	 */
	public $autoLogin=true;
	
	public $registrationUrl = array("/user/registration");
        public $supRegistrationUrl = array("/user/registration/supplier");
        public $tranRegistrationUrl = array("/user/registration/transporter");
	public $recoveryUrl = array("/user/recovery/recovery");
	public $loginUrl = array("/user/login");
	public $logoutUrl = array("/user/logout");
	public $profileUrl = array("/user/profile");
	public $returnUrl = array("/user/profile");
        public $returnSupplierUrl = array("/supplier/default");
        public $returnTransporterUrl = array("/transporter/default");
        public $returnDistributorUrl = array("/distributor/default");
        public $returnAdminUrl = array("/admin");
	public $returnLogoutUrl = array("/user/login");
        
        public $createUserUrl = array("/user/admin/create");
        public $provinceArr = array("An Giang", "Bà Rịa - Vũng Tàu", "Bạc Liêu", "Bắc Cạn", "Bắc Giang", "Bắc Ninh", "Bến Tre", "Bình Dương", "Bình Định", "Bình Phước", "Bình Thuận", "Cà Mau", "Cao Bằng", "Cần Thơ", "Đà Nẵng", "Đắk Lắk", "Đắk Nông", "Điện Biên", "Đồng Nai", "Đồng Tháp", "Gia Lai", "Hà Giang", "Hà Nam", "Hà Nội", "Hà Tĩnh", "Hải Dương", "Hải Phòng", "Hậu Giang", "Hòa Bình", "Tp Hồ Chí Minh", "Hưng Yên", "Khánh Hòa", "Kiên Giang", "Kon Tum", "Lai Châu", "Lạng Sơn", "Lào Cai", "Lâm Đồng", "Long An", "Nam Định", "Nghệ An", "Ninh Bình", "Ninh Thuận", "Phú Thọ","Phú Yên", "Quảng Bình", "Quảng nam", "Quảng Ngãi", "Quảng Ninh", "Quảng Trị", "Sóc Trăng", "Sơn La", "Tây Ninh", "Thái Bình", "Thái Nguyên", "Thanh Hóa", "Thừa Thiên Huế", "Tiền Giang", "Trà Vinh", "Tuyên Quang", "Vĩnh Long","Vĩnh Phúc", "Yên Bái");
	
	public $fieldsMessage = '';
	
	/**
	 * @var array
	 * @desc User model relation from other models
	 * @see http://www.yiiframework.com/doc/guide/database.arr
	 */
	public $relations = array();
	
	/**
	 * @var array
	 * @desc Profile model relation from other models
	 */
	public $profileRelations = array();
	
	/**
	 * @var boolean
	 */
	public $captcha = array('registration'=>true);
	
	/**
	 * @var boolean
	 */
	//public $cacheEnable = false;
	
	public $tableUsers = '{{users}}';
	public $tableProfiles = '{{profiles}}';
	public $tableProfileFields = '{{profiles_fields}}';
	
	static private $_user;
	static private $_admin;
	static private $_admins;
        static private $_supplier;
        static private $_distributor;
        static private $_transporter;
        static private $_defaultUser;
        static private $_suppliers;
        static private $_distributors;
        static private $_transporters;
        static private $_defaultUsers;


        /**
	 * @var array
	 * @desc Behaviors for models
	 */
	public $componentBehaviors=array();
	
	public function init()
	{
		// this method is called when the module is being created
		// you may place code here to customize the module or the application

		// import the module-level models and components
		$this->setImport(array(
			'user.models.*',
			'user.components.*',
		));              
	}
	
	public function getBehaviorsFor($componentName){
        if (isset($this->componentBehaviors[$componentName])) {
            return $this->componentBehaviors[$componentName];
        } else {
            return array();
        }
	}

	public function beforeControllerAction($controller, $action)
	{
		if(parent::beforeControllerAction($controller, $action))
		{
			// this method is called before any module controller action is performed
			// you may place customized code here
			return true;
		}
		else
			return false;
	}
	
	/**
	 * @param $str
	 * @param $params
	 * @param $dic
	 * @return string
	 */
	public static function t($str='',$params=array(),$dic='user') {
		return Yii::t("UserModule.".$dic, $str, $params);
	}
	
	/**
	 * @return hash string.
	 */
	public static function encrypting($string="") {
		$hash = Yii::app()->getModule('user')->hash;
		if ($hash=="md5")
			return md5($string);
		if ($hash=="sha1")
			return sha1($string);
		else
			return hash($hash,$string);
	}
	/**
         *  Get Image link
         * @param string $avatar
         * @return string
         */
        public static function getAvatarLink($avatar) {
                    $avatar_link = Yii::app()->request->baseUrl.User::S_IMAGES.$avatar;
                    return $avatar_link;
        }
        /**
         * Get thumbnail of image
         * @param string $avatar
         * @return string or false
         */
        public static  function getAvatarThumbnailLink($avatar) {
                $avatar_link = Yii::app()->request->baseUrl.User::S_THUMBNAIL.$avatar;
                return $avatar_link;
        }
	/**
	 * @param $place
	 * @return boolean 
	 */
	public static function doCaptcha($place = '') {
		if(!extension_loaded('gd'))
			return false;
		if (in_array($place, Yii::app()->getModule('user')->captcha))
			return Yii::app()->getModule('user')->captcha[$place];
		return false;
	}
	
	/**
	 * Return admin status.
	 * @return boolean
	 */
	public static function isAdmin() {
		if(Yii::app()->user->isGuest)
			return false;
		else {
			if (!isset(self::$_admin)) {
				if(User::S_ADMINISTRATOR == self::user()->superuser)
					self::$_admin = true;
				else
					self::$_admin = false;
			}
			return self::$_admin;
		}
	}

        /**
	 * Return distributor status.
	 * @return boolean
	 */
	public static function isDistributor() {
		if(Yii::app()->user->isGuest)
			return false;
		else {
			if (!isset(self::$_distributor)) {
				if(User::S_DISTRIBUTOR == self::user()->superuser)
					self::$_distributor = true;
				else
					self::$_distributor = false;
			}
			return self::$_distributor;
		}
	}
        /**
	 * Return supplier status.
	 * @return boolean
	 */
	public static function isSupplier() {
		if(Yii::app()->user->isGuest)
			return false;
		else {
			if (!isset(self::$_supplier)) {
				if(User::S_SUPPLIER == self::user()->superuser)
					self::$_supplier = true;
				else
					self::$_supplier = false;
			}
			return self::$_supplier;
		}
	}
        /**
	 * Return tranporter status.
	 * @return boolean
	 */
	public static function isTransporter() {
		if(Yii::app()->user->isGuest)
			return false;
		else {
			if (!isset(self::$_transporter)) {
				if(User::S_TRANSPORTER == self::user()->superuser)
					self::$_transporter = true;
				else
					self::$_transporter = false;
			}
			return self::$_transporter;
		}
	}
        /**
	 * Return default user status.
	 * @return boolean
	 */
	public static function isDefaultUser() {
		if(Yii::app()->user->isGuest)
			return false;
		else {
			if (!isset(self::$_defaultUser)) {
				if(User::S_DEFAULT_USER == self::user()->superuser)
					self::$_defaultUser = true;
				else
					self::$_defaultUser = false;
			}
			return self::$_defaultUser;
		}
	}

	/**
	 * Return admins.
	 * @return array syperusers names
	 */	
	public static function getAdmins() {
		if (!self::$_admins) {
			$users = User::model()->active()->administrator()->findAll();
			$return_name = array();
			foreach ($users as $user)
				array_push($return_name,$user->username);
			self::$_admins = $return_name;
		}
		return self::$_admins;
	}
        /**
	 * Return suppliers.
	 * @return array syperusers names
	 */
	public static function getSuppliers() {
		if (!self::$_suppliers) {
			$users = User::model()->active()->supplier()->findAll();
			$return_name = array();
			foreach ($users as $user)
				array_push($return_name,$user->username);
			self::$_suppliers = $return_name;
		}
		return self::$_suppliers;
	}
        /**
	 * Return distributors.
	 * @return array syperusers names
	 */
	public static function getDistributors() {
		if (!self::$_distributors) {
			$users = User::model()->active()->distributor()->findAll();
			$return_name = array();
			foreach ($users as $user)
				array_push($return_name,$user->username);
			self::$_distributors = $return_name;
		}
		return self::$_distributors;
	}
        /**
	 * Return transporters.
	 * @return array syperusers names
	 */
	public static function getTransporters() {
		if (!self::$_transporters) {
			$users = User::model()->active()->transporter()->findAll();
			$return_name = array();
			foreach ($users as $user)
				array_push($return_name,$user->username);
			self::$_transporters = $return_name;
		}
		return self::$_transporters;
	}
        /**
	 * Return defaulUsers.
	 * @return array syperusers names
	 */
	public static function getDefaulUsers() {
		if (!self::$_defaulUsers) {
			$users = User::model()->active()->defaultUser()->findAll();
			$return_name = array();
			foreach ($users as $user)
				array_push($return_name,$user->username);
			self::$_defaulUsers = $return_name;
		}
		return self::$_defaulUsers;
	}
	
	/**
	 * Send mail method
	 */
	public static function sendMail($email,$subject,$message) {
    	$adminEmail = Yii::app()->params['adminEmail'];
	    $headers = "MIME-Version: 1.0\r\nFrom: $adminEmail\r\nReply-To: $adminEmail\r\nContent-Type: text/html; charset=utf-8";
	    $message = wordwrap($message, 70);
	    $message = str_replace("\n.", "\n..", $message);
	    return mail($email,'=?UTF-8?B?'.base64_encode($subject).'?=',$message,$headers);
	}
	
	/**
	 * Return safe user data.
	 * @param user id not required
	 * @return user object or false
	 */
	public static function user($id=0) {
		if ($id) 
			return User::model()->active()->findbyPk($id);
		else {
			if(Yii::app()->user->isGuest) {
				return false;
			} else {
				if (!self::$_user)
					self::$_user = User::model()->active()->findbyPk(Yii::app()->user->id);
				return self::$_user;
			}
		}
	}
	
	/**
	 * Return safe user data.
	 * @param user id not required
	 * @return user object or false
	 */
	public function users() {
		return User;
	}
}
